<?php
namespace app\admin\controller;
use app\admin\model\Cate;
use think\Db;
use think\validate;
class Document extends Common
{
    public function lst()
    {	//文章列表页三表联查
    	$artRes=db('document')->field('a.*,c.cate_name,m.model_name,m.id as modelid')->alias('a')->join('cms_cate c','a.cate_id=c.id')->join('cms_model m','a.model_id=m.id')->paginate(2);
    	$cateid=input('cateid');
    	$modelid=input('model_id');
    	if(!$modelid && !$cateid){
    		$modelid=0;
    	}
    	$this->assign(array(
    		'modelid'=>$modelid,
    		'cateid'=>$cateid,
    		'artRes'=>$artRes,
    		));
        return view('list');
    }

    public function add()
    {
    	$cateid=input('cateid');
    	$modelid=input('model_id');
    	if(!$modelid || !$cateid){
    		$this->error('非法操作！');
    	}
    	if(request()->isPost()){
    		$data=input('post.');
            //验证规则
            $validate = validate('Document');//助手函数
            if(!$validate->scene('add')->check($data)){
                $this->error($validate->getError());
            } 
    		//获取表前缀
    		$prefix=config('database.prefix');
    		$cmsdocument=$prefix.'document';//主文章表的名称
    		$_columns=Db::query("show columns from $cmsdocument");
    		//得到document主表里面的所有字段
    		$columns=array();
    		foreach ($_columns as $k => $v) {
    					$columns[]=$v['Field'];
    				}
    		$doucment=array();//主表字段
    		$addtable=array();//附表字段
    		foreach ($data as $k => $v) {
    			if(in_array($k,$columns)){
    				if(is_array($v)){
    					$v=implode(',', $v);
    				}//把数组转换成字符串添加到数据表中
    				$doucment[$k]=$v;
    			}else{
    				if(is_array($v)){
    					$v=implode(',', $v);
    				}//把数组转换成字符串添加到数据表中
    				$addtable[$k]=$v;
    			}
    		}
    			//附加表多图片上传处理
    			//首先获取上传图片的name值
    			if($_FILES){
    				foreach ($_FILES as $k => $v) {
    					 if($v['tmp_name'] != ''){
                            $addtable[$k]=$this->uploads($k); 
                            }
    				}
    			}

    		$doucment['model_id']=$modelid;//模型id
    		$doucment['time']=time();
    		//添加主表数据
    		$addDocument=db('document')->insertGetId($doucment);//得到自增后的主键id
    		
    		//获得附加表的名称
    		$_tableName=db('model')->field('table_name')->find($modelid);
    		$tableName=$_tableName['table_name'];
    		$addtable['aid']=$addDocument;//得到主表id即是附加表的aid
    		//添加附加表
    		$addfilm=db($tableName)->insert($addtable);
    		if($addDocument && $addfilm){
    			$this->success('添加数据成功！',url('document/lst'));
    		}else{
    			$this->error('添加数据失败！');
    		}
    		return;
    	}
    	 
    	//获取当前模型自定义字段
    	$field=db('model_field')->where('model_id',$modelid)->select();
    	//dump($field);die;
    	//获取长文本字段分配到模板中
    	$longtextfield=db('model_field')->where(['model_id'=>$modelid,'field_type'=>9])->select();
    	//获取栏目信息
    	$cate= new Cate();
      	$cateres=$cate->cateTree();
      $this->assign(array(
          'cateres'=>$cateres,
          'modelid'=>$modelid,
    	'cateid'=>$cateid,
    		'field'=>$field,
    		'longtextfield'=>$longtextfield,
        ));
   		return view();
    }
    //异步上传图片
    public function upload()
   {

            // 获取表单上传文件
            $files = request()->file('thumb');
          // 移动到框架应用根目录/public/uploads/ 目录下
            $info= $files->validate(['size'=>2097152,'ext'=>'jpg,png,gif'])->move(ROOT_PATH . 'public/static/index/uploads/documentimg'); 
            if($info){ 
            	if($this->config['thumb'] == '是'){
            		$imgSrc=INDEX.$info->getSaveName();//图片的完整路径
	            	$image = \think\Image::open($imgSrc);
	            	$thumb_width=$this->config['thumb_width'];
            		$thumb_height=$this->config['thumb_height'];
            		switch ($this->config['thumb_crop']) {
            				case '等比例缩放':
            					$thumb_crop=1;
            					break;
            				case '缩放后填充':
            					$thumb_crop=2;
            					break;
            				case '居中裁剪':
            					$thumb_crop=3;
            					break;
            				case '左上角裁剪':
            					$thumb_crop=4;
            					break;
            				case '右下角裁剪':
            					$thumb_crop=5;
            					break;
            				case '固定尺寸缩放':
            					$thumb_crop=6;
            					break;
            				default:
            					$thumb_crop=1;
            					break;
            			}
            			switch ($this->config['water_position']) {
            				case '左下角':
            					$water_position=1;
            					break;
            				case '上居中':
            					$water_position=2;
            					break;
            				case '右上角':
            					$water_position=3;
            					break;
            				case '左居中':
            					$water_position=4;
            					break;
            				case '居中':
            					$water_position=5;
            					break;
            				case '右居中':
            					$water_position=6;
            					break;
            				case '左下角':
            					$water_position=7;
            					break;
            				case '右居中':
            					$water_position=8;
            					break;
            				case '右下角':
            					$water_position=9;
            					break;
            				default:
            					$water_position=1;
            					break;
            			}	
            		$water_img=$this->config['water_img'];
            		$water_alpha=$this->config['water_alpha'];
	            	$water=INDEX.'logo.png';
	            	if($this->config['water']){
						$image->thumb($thumb_width,$thumb_height,$thumb_crop)->water($water,$water_position,$water_alpha)->save($imgSrc);//替换原图并添加水印
	            	}else{
	            		$image->thumb($thumb_width, $thumb_height,$thumb_crop)->save($imgSrc);//缩略图片替换原图
	            	}
					//将图片裁剪为300x300并保存为crop.png	
            	}
            	
            	// 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
            	 return  $info->getSaveName();
            }else{
                // 上传失败获取错误信息
              return  $this->error($file->getError());
            }    
                   
   }
   //异步取消撤销按钮功能
   public function delimg(){

        $imgurl=input('imgurl');//INDEX
        //接受文章ID 进行删除数据表中的图片路径
        $documentid=input('documentid');
        if($documentid){
          db('document')->where('id',$documentid)->setField('thumb','');
        }
        
        $imgurls=INDEX.$imgurl;        
        $res=unlink($imgurls);//使用UNlink要使用相对路径进行删除图片，绝对路径有错误
           if($res){
             $data=[
                      'status'=>0,
                      'msg'=>'撤销成功！',
                  ];
              }else{
                  $data=[
                      'status'=>1,
                      'msg'=>'撤销失败！',
                  ];
              }
        return $data;
    }

    public function edit()
    {
        $artid=input('id');//文章ID
        $modelid=input('model_id');
        if(!$modelid){
            $modelid=0;
        }
        //获得附加表的名称
            $_tableName=db('model')->field('table_name')->find($modelid);
            $tableName=$_tableName['table_name'];
        if(request()->isPost()){
            $data=input('post.');
            //验证规则
            $validate = validate('Document');//助手函数
            if(!$validate->scene('edit')->check($data)){
                $this->error($validate->getError());
            } 
            //获取表前缀
            $prefix=config('database.prefix');
            $cmsdocument=$prefix.'document';//主文章表的名称
            $_columns=Db::query("show columns from $cmsdocument");
            //得到document主表里面的所有字段
            $columns=array();
            foreach ($_columns as $k => $v) {
                        $columns[]=$v['Field'];
                    }
            $document=array();//主表字段
            $addtable=array();//附表字段
            foreach ($data as $k => $v) {
                if(in_array($k,$columns)){
                    if(is_array($v)){
                        $v=implode(',', $v);
                    }//把数组转换成字符串添加到数据表中
                    $document[$k]=$v;
                }else{
                    if(is_array($v)){
                        $v=implode(',', $v);
                    }//把数组转换成字符串添加到数据表中
                    $addtable[$k]=$v;
                }
            }
                //附加表多图片上传处理
                //首先获取上传图片的name值
                if($_FILES){
                    foreach ($_FILES as $k => $v) {
                         if($v['tmp_name'] != ''){
                            $addtable[$k]=$this->uploads($k); 
                            }
                    }
                }
                
            //修改主表数据
            $documentsave=db('document')->where(['id'=>$document['id']])->update($document);
            //修改附加表数据
            $addtablesave=db($tableName)->where(['aid'=>$document['id']])->update($addtable);
            if($documentsave!=false && $addtablesave!=false){
                    $this->success('修改数据成功！');
            }else{
                $this->error('修改数据失败！');
            }
            return;
        }
        
        //获取当前模型自定义字段
        $field=db('model_field')->where('model_id',$modelid)->select();
        //获取附加表的表名和数据
        $table=db('model')->field('table_name')->find($modelid);
        $tableName=$table['table_name'];
        $data=db($tableName)->where('aid',$artid)->find();
        //dump($data);die;
        //获取文章表的数据
        $artRes=db('document')->find($artid);
        //dump($artRes);die;
        //获取栏目信息
        $cate= new Cate();
        $cateres=$cate->cateTree();
        $this->assign(array(
            'modelid'=>$modelid,
            'aid'=>$artid,
            'cateres'=>$cateres,  
            'artRes'=>$artRes,
            'field'=>$field,
            'data'=>$data,
            ));
        return view();
    }

    //图片上传函数
    public function uploads($name){
    	// 获取表单上传文件 例如上传了001.jpg
	    $file = request()->file($name);
	    // 移动到框架应用根目录/public/uploads/ 目录下
	     $info= $file->validate(['size'=>2097152,'ext'=>'jpg,png,gif'])->move(ROOT_PATH . 'public/static/index/uploads/att');
	    if($info){
	        // 成功上传后 获取上传信息
	        // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
	        return $info->getSaveName();
	    }else{
	        // 上传失败获取错误信息
	        $this->error($file->getError()); 
	    }
    }

    //异步删除附加表图片
    public  function ajaximg(){
            $aid=input('aid');
            $modelid=input('modelid');
            $field_name=input('field_name');
            $imgSrc=input('imgSrc');
            //获取要删除图片的表名
            $models=db('model')->find($modelid);
            $tableName=$models['table_name'];
            //清空当前表的图片路径
            $save=db($tableName)->where('aid',$aid)->setField($field_name,'');
            //ADDTABLE附加表的相对路径
            $imgSrcs=ADDTABLE.$imgSrc;
            $res=unlink($imgSrcs);//使用UNlink要使用相对路径进行删除图片，绝对路径有错误
           if($res){
                echo 1;
            }else{
                echo 0;
              }

    }

    //删除操作
    public function delete(){
        $artid=input('id');
        $modelid=input('modelid');
        //先删除附加表中的数据就要现获取他的表名
        //获得附加表的名称
            $_tableName=db('model')->field('table_name')->find($modelid);
            $tableName=$_tableName['table_name'];
        //删除附加表操作
        $adddel=db($tableName)->where('aid',$artid)->delete();
        //删除主表数据操作
        $del=db('document')->where('id',$artid)->delete();
        if($addtable && $del){
            $this->success('删除数据成功！',url('doucment/lst'));
        }else{
            $this->error('删除数据失败！');
        }
    }
}
